package Thread;
//创建两个线程和两个锁，
//在线程1中：在进行使用锁1后，还没有关闭锁1时：就进行使用锁2，会出现什么情况
//在线程2中：在使用锁2后，还没有关闭锁2时：就进行使用锁1，会出现什么情况；
//会出现死锁的情况，
//解决死锁的方法：
//1，不要进行嵌套执行，分开执行；
//2，进行规定次序进行有序的执行；
public class Demo20 {
    public static int count=0;
    public static void main(String[] args) throws InterruptedException {
        Object locker1=new Object();
        Object locker2=new Object();
        Thread t1=new Thread(()->{
            synchronized (locker1){
               try{
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                   throw new RuntimeException(e);
               }
                synchronized (locker2){
                    System.out.println("在线程t1的情况下：使用到了两把锁");
                }
            }
        });
        Thread t2=new Thread(()->{
            synchronized (locker1){
                try{
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                synchronized (locker2){
                    System.out.println("在使用线程2的情况下,使用到了两把锁");
                }
            }
        });
        t1.start();
        t2.start();
        t1.join();
        t2.join();
    }
}
